package org.auth.controller;

import java.security.Principal;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.provider.token.ConsumerTokenServices;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/inner_api")
public class InnerApiController {
	/**
	 * 密码生成器
	 */
	@Autowired
	private PasswordEncoder passwordEncoder;
	
	/**
	 * TOKEN操作类
	 */
	@Autowired
	private ConsumerTokenServices tokenServices;

	/**
	 * 取得当前用户
	 * 
	 * @param user 用户信息
	 * @return 用户信息
	 */
	@RequestMapping("/getUser")
	public Principal user(Principal user) {
        return user;
    }
	
	/**
	 * 生成密码
	 * 
	 * @param user 密码（明文）
	 * @return 密码（密文）
	 */
	@RequestMapping("/createPassword")
	public String createPassword(@RequestParam("password") String password) {
        return passwordEncoder.encode(password);
    }
	
	/**
	 * 验证密码
	 * 
	 * @param rawPassword 原始密码
	 * @param encodedPassword 密码（密文）
	 * @return 成功/失败
	 */
	@RequestMapping("/checkPassword")
	public boolean checkPassword(@RequestParam("rawPassword") String rawPassword,@RequestParam("encodedPassword") String encodedPassword) {
        return passwordEncoder.matches(rawPassword, encodedPassword);
    }
	
	/**
	 * 注销
	 * 
	 * @param tokenValue Token
	 * @return 成功/失败
	 */
	@RequestMapping("/revokeToken")
	public boolean revokeToken(@RequestParam("tokenValue") String tokenValue) {
		return tokenServices.revokeToken(tokenValue);
	}
}
